package chapter3.No3_1_等待和通知机制.j生产者_消费者模式实现.demo4;

/**
 * *：一生产与多消费：操作栈
 *    会出现假死和异常。
 *    假死原因：
 *      1. 消费者唤醒了消费者。一个生产者等待，2个消费者等待的情况。
 *    异常原因：
 *      2. list.remove(0)这个代码会出现异常，
 *         情况如下，生产者1生产了1个通知消费者1，消费一个。通知消费者2继续执行到
 *         list.remove(0)时，因为消费者1已经消费，所以没有值。所以出现下标超出异常
 *
 *    假死解决办法：
 *      1. 将notify()方法修改成notifyAll()通知所有线程
 *    异常解决办法：
 *      1. 因为使用了if，然消费者被唤醒的时候，再去判断一次，是否有值。所以可以把
 *         if修改称while，这样就不会出现异常了
 * Created by Administrator on 2016/11/19.
 */
public class Main {

    public static void main(String[] args) {
        MyStack stack = new MyStack();
        ThreadP p = new ThreadP(stack);
        ThreadC c = new ThreadC(stack);
        ThreadC c2 = new ThreadC(stack);
        p.start();
        c.start();
        c2.start();
    }
}
